home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sys / finit.c < prev    next >
C/C++ Source or Header  |  1990-12-19  |  4KB  |  141 lines

  1. /*
  2.  *    @(#)finit.c 1.5 86/05/24 Copyright (c) 1985 by Sun Microsystems, Inc.
  3.  */
  4.  
  5. #include "../sun3/cpu.addrs.h"
  6. #include "../h/globram.h"
  7. #include "../h/dpy.h"
  8. #include "../h/video.h"
  9. #include "../h/enable.h"
  10. #include "../h/fbio.h"
  11. #include "../h/eeprom.h"
  12.  
  13. extern unsigned char f_bitmap[], f_index[], f_data_hi[], f_data_lo[];
  14.  
  15. finit(newx, newy)
  16.     unsigned newx, newy;
  17. {
  18. unsigned short t_cols,t_rows;  /* for cols and rows  calc */
  19.  
  20.     /* Expand the compressed font into RAM */
  21.     fexpand (font, f_bitmap, FBITMAPSIZE, f_index, f_data_hi, f_data_lo);
  22. #ifdef PRISM
  23.  
  24.         gp->g_fbtype = FBTYPE_SUN4COLOR;           
  25.  
  26. #else PRISM
  27.     if (init_scolor() >= 0)   /* check for color */
  28.                 gp->g_fbtype = FBTYPE_SUN2COLOR;
  29.     else {
  30.         gp->g_fbtype = FBTYPE_SUN2BW;
  31.     }
  32. #endif    PRISM
  33.     /*
  34.      * Decide whether we are 1024*1024 or 1192*900 and/or color.
  35.      */
  36.     if(EEPROM->ee_diag.eed_scrsize == EED_SCR_1024X1024) {
  37.         SCRWIDTH = 1024;
  38.         SCRHEIGHT = 1024;
  39.         WINTOP = 16+224/2;    /* Like Sun-1 but centered in 1024 */
  40.         WINLEFT    = 16;
  41.     } else if (EEPROM->ee_diag.eed_scrsize == EED_SCR_1600X1280 &&
  42.                    gp->g_fbtype != FBTYPE_SUN2COLOR){
  43.                 SCRWIDTH = 1600;
  44.                 SCRHEIGHT = 1280;
  45.         t_cols = EEPROM->ee_diag.eed_colsize;
  46.         t_rows = EEPROM->ee_diag.eed_rowsize;
  47.         if(t_cols < 10) t_cols = 10;
  48.         if(t_cols > (char)120) t_cols = 120;
  49.         if(t_rows < 10) t_rows = 10;
  50.         if(t_rows > 48) t_rows = 48;
  51. #ifdef SIRIUS
  52.         BOTTOM = t_rows;
  53.         RIGHT = t_cols;
  54. #endif SIRIUS
  55.         /* now initialize to appropriate size */
  56.         t_cols = (120 - t_cols) / 2;  /* gives "centered" loc */
  57.         t_cols = (t_cols * CHRWIDTH) + 64 ;
  58.         WINLEFT = t_cols ;
  59.         WINLEFT += 70;
  60.         /* now for the row */
  61.         t_rows = 48 - t_rows;
  62.         t_rows >>= 1 ;  /* by 2 */ 
  63.         t_rows = (t_rows * CHRHEIGHT) + 56;
  64.         WINTOP = t_rows;
  65.         WINTOP += 30;  /* tried 60  */
  66.     } else {
  67.         SCRWIDTH = 1152;
  68.         SCRHEIGHT = 900;
  69.         WINTOP = 56;
  70.         WINLEFT    = 64;
  71.     }
  72.  
  73.     /* set for pixrect code */
  74. #ifdef SIRIUS
  75.         if(gp->g_fbtype == FBTYPE_SUN2COLOR) {  /* sirius can have color brd */
  76.         RIGHT = 80;
  77.         BOTTOM = 34;     /* but must adhere to 1152 */
  78.     }
  79.  
  80.         WINBOT = WINTOP+BOTTOM*CHRHEIGHT;
  81. #endif SIRIUS
  82.  
  83.     /*
  84.      * Set up all the various garbage for the rasterop (pixrect) code.
  85.      */
  86.     GXBase = (int)VIDEOMEM_BASE;
  87.     fbdata.md_linebytes = SCRWIDTH/8;
  88. /*    fbdata.md_image = GXBase;  they are identical */
  89.     fbdata.md_offset.x = 0;
  90.     fbdata.md_offset.y = 0;
  91. /*    fbdata.md_primary is unreferenced */
  92.  
  93. /*    fbpr.pr_ops is unreferenced */
  94. /*    fbpr.pr_size.x is unreferenced */
  95. /*    fbpr.pr_size.y is unreferenced */
  96. /*    fbpr.pr_depth is unreferenced */
  97.     fbpr.pr_data = (caddr_t)&fbdata;
  98.  
  99.     fbpos.pr = &fbpr;
  100. /*    fbpos.pos.x is set up by the call to pos() below */
  101. /*    fbpos.pos.y is set up by the call to pos() below */
  102.  
  103.     chardata.md_linebytes = 2;
  104. /*    chardata.md_image is filled in at run time */
  105.     chardata.md_offset.x = 0;
  106.     chardata.md_offset.y = 0;
  107. /*    chardata.md_primary is unreferenced */
  108.  
  109. /*    charpr.pr_ops is unreferenced */
  110.     charpr.pr_size.x = CHRWIDTH;
  111.     charpr.pr_size.y = CHRHEIGHT;
  112. /*    charpr.pr_depth is unreferenced */
  113.     charpr.pr_data = (caddr_t)&chardata;
  114.  
  115.     charpos.pr = &charpr;
  116.     charpos.pos.x = 0;
  117.     charpos.pos.y = 0;
  118.     
  119.     /* Sun-2 0-bits are white, 1-bits are black. */
  120.     fillfunc = POX_CLR;            /* White screen */
  121.     chrfunc = POX_SRC;            /* No inverse video */
  122.     state = ALPHA;
  123.     cursor = BLOCKCURSOR;
  124.     scrlins = 1;                /* scroll by 1's initially */
  125. #ifdef PRISM
  126.         fill_colormaps();       /*
  127.                                  * fill the 3 color maps with a default
  128.                                  * pattern.  fill_colormaps() is in
  129.                                  * diagmenus.c
  130.                                  */
  131.         set_enable(get_enable() | ENA_VIDEO);
  132.                         /* turn on video; normally done in init_scolor, but we
  133.                          * bypass init_scolor since we don't load in scutils.c
  134.                          * for the prism.
  135.                          */
  136. #endif PRISM
  137.  
  138.  
  139.     pos(newx, newy);            /* Set ax, ay, dcok */
  140. }
  141.